# coding=utf-8
from flask import Flask
from settings import dict_config
from flask_migrate import Migrate

'''创建APP的函数，参数是代表运行的类型：1.开发环境    2.生产类型'''
def create_app(run_type):
    #创建app
    app = Flask(__name__)

    #加载整个项目的配置（根据你指定的类型来加载对应的项目配置）
    app.config.from_object(dict_config.get(run_type)) #利用字典的取值方式

    #加载sqlchemy
    from comment.modules import db
    db.init_app(app) #初始化app

    #加载redis数据库
    from comment.ultils.Financlal_Readlis import fr
    fr.init_app(app)

    #初始化日志处理的工具
    from comment.ultils.Financlal_Logging import create_logger
    create_logger(app)

    #初始化Migrate
    #可用命令：flask db init（初始化）   flask db migrate（装载设置版本）   flask db upgrade（真正的创建数据库表）   flask db --help（命令解析）
    #执行以上的命令，需要设置默认的的Flask项目的入口文件，当前项目没有默认的项目入口文件，需要设置环境变量
    #格式：set FLASK_APP=目录/目录/项目.py    这里是 set FLASK_APP=financial/main.py（等号两边没有空格）
    '''如果要更新字段的话，把mysql的表删除，然后输入中间两个命令就行了'''
    Migrate(app,db)

    #加载蓝图
    from financial.resorces.user import user_bp
    app.register_blueprint(user_bp)

    from financial.resorces.letter import letter_bp
    app.register_blueprint(letter_bp)

    from financial.resorces.card import card_bp
    app.register_blueprint(card_bp)

    from financial.resorces.product import product_bp
    app.register_blueprint(product_bp)

    from financial.resorces.account import account_bp
    app.register_blueprint(account_bp)

    from financial.resorces.transaction import transaction_bp
    app.register_blueprint(transaction_bp)

    #注册请求钩子（注册token认证的请求钩子）
    from comment.ultils.request_auth import jwt_request_auth
    #before_request在每一次请求之前执行
    app.before_request(jwt_request_auth) #只传函数名，不是调用 #注册钩子函数

    return app #返回app


